// 各种授权功能的js
import { deepClone, isEmpty, voidFunction } from "./newUtil"

/**
 * 获取模糊定位
 * 
 * 改为promise形式，并添加拒绝时的处理
 * @param {*} options 小程序模糊定位参数对象
 */
let getFuzzyLocation = (options = {}) => {
  let success = options.success || voidFunction
  let fail = options.fail || voidFunction
  return new Promise((resolve, reject) => {
    let obj = deepClone(options)
    obj.success = (res) => {
      success(res)
      resolve(res)
    }
    // 获取定位失败
    obj.fail = (err) => {
      console.log('获取定位失败', err)
      let message = err.errMsg || ''
      // 用户拒绝
      if (message.includes('deny')) {
        wx.showModal({
          title: '定位失败',
          content: '未获取到定位信息，请授权后继续',
          confirmText: '去授权',
          success (res) {
            if (!res.confirm) {
              fail(err)
              reject(err)
              wx.showToast({
                title: '用户取消',
                icon: 'none'
              })
              return
            }
            // 打开设置
            wx.openSetting({
              success (res) {
                let setting = res.authSetting || {}
                // 用户未修改授权定位
                if (!setting['scope.userFuzzyLocation']) {
                  wx.showToast({
                    title: '未授权',
                    icon: 'none'
                  })
                  fail(err)
                  reject(err)
                  return
                }
                // 授权完成后，重新获取定位
                let obj2 = deepClone(options)
                obj2.success = (res) => {
                  success(res)
                  resolve(res)
                }
                obj2.fail = (err) => {
                  fail(err)
                  reject(err)
                }
                wx.getFuzzyLocation(obj2)
              },
              // 打开设置失败
              fail () {
                fail(err)
                reject(err)
              }
            })
          },
          fail () {
            fail(err)
            reject(err)
          }
        })
      } else {
        fail(err)
        reject(err)
      }
    }
    wx.getFuzzyLocation(obj)
  })
}

/**
 * 选择地理位置
 *  
 * 改为promise形式
 * @param {*} options 小程序选择定位参数对象
 */
let chooseLocation = (options = {}) => {
  let success = options.success || voidFunction
  let fail = options.fail || voidFunction
  // 转换经纬度为数字类型
  if (!isEmpty(options.latitude)) {
    options.latitude = parseFloat(options.latitude)
  }
  if (!isEmpty(options.longitude)) {
    options.longitude = parseFloat(options.longitude)
  }
  return new Promise((resolve, reject) => {
    let obj = deepClone(options)
    obj.success = (res) => {
      success(res)
      resolve(res)
    }
    // 选择位置失败
    obj.fail = (err) => {
      console.log('选择位置失败', err)
      fail(err)
      reject(err)
    }
    wx.chooseLocation(obj)
  })
}

/**
 * 选择微信地址
 *  
 * 改为promise形式
 * @param {*} options 小程序选择地址参数对象
 */
let chooseAddress = (options = {}) => {
  let success = options.success || voidFunction
  let fail = options.fail || voidFunction
  return new Promise((resolve, reject) => {
    let obj = deepClone(options)
    obj.success = (res) => {
      success(res)
      resolve(res)
    }
    // 选择位置失败
    obj.fail = (err) => {
      console.log('选择位置失败', err)
      fail(err)
      reject(err)
    }
    wx.chooseAddress(obj)
  })
}

export {
  getFuzzyLocation,
  chooseLocation,
  chooseAddress
}